var totalPercent = 0;
var maxPercent = 100;

jQuery(function() {
	jQuery("select.stageNumber").styledSelect( {
		cls : "select horizontalElect selectStageList dropshadowBox"				
		}, 
		".numberOfStage",
		1,
		function(index, val){
			var maxPhases = 10;
			var numberOfPhases = parseInt(val);
			if(numberOfPhases > maxPhases){
				numberOfPhases = maxPhases;
			}
			for(var index=1; index<=numberOfPhases; index++){
				var $phase = jQuery("ol.listTaskGoal[rel="+index+"]");
				if($phase.css("display") == "none"){
					$phase.slideDown();
				}
			}
			
			for(var index=numberOfPhases+1; index<=maxPhases; index++){
				var $phase = jQuery("ol.listTaskGoal[rel="+index+"]");
				if($phase.css("display") != "none"){
					$phase.fadeOut();
				}
			}
			
			calculateTotalPercent();
		}
	);
	
	jQuery("input[rel=numeric]").keydown(function(e){
		var flag = e.keyCode >= 48 && e.keyCode <= 57;
		flag |= e.keyCode == 32 || e.keyCode == 8;
		flag |= e.which >= 48 && e.which <= 57;
		flag |= e.which == 32 || e.which == 8; 
		
		if(!flag){
			return false;
		}
	});
	
	jQuery("input.datePickerInput").keydown(function(e){
		return false;
	});
	
	jQuery(".datePickerInput").each(function(){
		var $this = jQuery(this);
		var dest = $this.attr("rel");
		$this.datepicker({
			dateFormat: 'dd/mm/yy',
			minDate: new Date()
		});
		
		jQuery(dest).unbind('click').click(function(){
			$this.datepicker('show');
			return false;
		});
	});
	
	var previousPercent = 0;
	jQuery("input.taskPercent").focus(function(){
		var percent = this.value;
		percent = percent.substring(0, percent.length-1);
		if(percent == "")
			percent = "0";
		this.value = percent;
		previousPercent = parseInt(percent);
		this.value = '';
	}).change(function(){
		var percent = this.value;
		percent = parseNumber(percent);
		
		if(percent <= 100 && totalPercent-previousPercent+percent <= 100){
			totalPercent = totalPercent-previousPercent+percent;
			this.value = percent;
		}else{
			this.value = previousPercent;
		}
	}).blur(function(){
		var val = this.value;
		if(val == '')
			val = previousPercent;
		this.value = val + '%';
		calculateTotalPercent();				
	});
	
	var goalDeadLine = new Date();
	
	// init percent with %
	jQuery("input.taskPercent").each(function(){
		this.value = this.value + "%";
	});
	
	jQuery("input.datePickerInput").change(function(){
		var $this = jQuery(this);
		var index = $this.attr("rel");
		var prefix = '#showDatePicker';
		
		index = index.replace(prefix,'');
		if(index == 0){
			goalDeadLine = $this.val();
			setMaxDate(jQuery("input.datePickerInput:not(input.deadLine)"), goalDeadLine);
			return;
		}
		
		var nextIndex = parseInt(index) + 1;
		var $nextDeadLine = jQuery("input.datePickerInput[rel="+prefix+nextIndex+"]");
		var minDeadLine = $this.val();
		if(minDeadLine == ''){
			minDeadLine = goalDeadLine;
		}
		setMinDate($nextDeadLine, minDeadLine);
//		$nextDeadLine.datepicker("option", "minDate", minDeadLine);
	});
	
	jQuery("input#newGoalTitle").keydown(function(e){
		if(e.keycode == 13 || e.which == 13){
			if(jQuery("div.goalSuggestion").css("display") == "none"){
				return false;
			}
		}
	});
	
	jQuery("div.dbAddGoal a#add_goal").click(function(){
		return false;
	});
	
	calculateTotalPercent();
});

function setMinDate($selector, minDate){
	$selector.each(function(){
		jQuery(this).datepicker("option", "minDate", minDate);
	});
}

function setMaxDate($selector, maxDate){
	$selector.each(function(){
		jQuery(this).datepicker("option", "maxDate", maxDate);
	});
}

function parseNumber(num){
	if(!num)
		return 0;
		
	num = num + '';
	num = jQuery.trim(num);
	var numLength = num.length;
	var count = 0;
	while(count < numLength){
		count++;
		if(num[0] == '0'){
			num = num.substring(1);
		}else{
			return parseInt(num);
		}
	}
	
	return 0;
}

function submitForm(){
	var validated = validate();
	
	if(validated == false){
		return;
	}
	
	jQuery("input.taskPercent").each(function(){
		var percent = this.value;
		percent = percent.substring(0, percent.length-1);
		this.value = parseInt(percent);
	});
	jQuery("input.datePickerInput").each(function(){
		var text = this.value;
		this.value = text;
	});
	jQuery("form[name=smart]").submit();
}

function blockAddGoalInput(){
	jQuery("input#newGoalTitle").iBlock({img: '/images/ajaxloading.gif'});
	jQuery("input[type=button]#add_goal").iBlock({});
}

function unblockAddGoalInput(){
	jQuery("input#newGoalTitle").iUnblock();
	jQuery("input[type=button]#add_goal").iUnblock();
}

function calculateTotalPercent(){
	totalPercent = 0;
	jQuery(".listTaskGoal").each(function(){
		var $this = jQuery(this);
		var $taskName = $this.find("input.taskName");
		var $taskPercent = $this.find("input.taskPercent");
		var $taskDeadline = $this.find("input.taskDeadline");
		
		if($this.css("display") == "none"){
			$taskName.val("");
			$taskPercent.val("0%");
			$taskDeadline.val("");
		}else{
			var percent = $taskPercent.val();
			percent = parseInt(percent.substring(0, percent.length-1));
			totalPercent += percent;
		}
	});
	
	jQuery(".totalPercent").find("b").text(totalPercent+"%");
	jQuery(".remainPercent").find("b").text((100-totalPercent)+"%");
}

function addNewGoalValidate(){
	if(updateSMARTGoal){
		return true;
	}
	
	var $newGoal = jQuery("input#newGoalTitle");
	if($newGoal.attr("rel") == 'deny'){
		var $content = buildFailedNotice('Thêm mục tiêu không thành công!','Số lượng mục tiêu để bạn thêm vào danh sách hôm nay đã hết. <b>Hãy thêm vào trong thời gian tới</b>.'); 
		jQuery("div#addGoalResult").unbind();
		jQuery("div#addGoalResult").html($content).css('margin-bottom', '15px').fadeIn(2000).delay(5000).fadeOut(1000);
		return false;
	}
	
	$newGoal.blur();
	var newGoal = jQuery("input#newGoalTitle").val();
	if(newGoal == null || jQuery.trim(newGoal) == ""){
		alert("Hãy nhập ít nhất 1 ký tự.");
		jQuery("input#newGoalTitle").focus();
		return false;
	}
	newGoal = jQuery.trim(newGoal);
	var goalDTO = {
		title: newGoal
	};
	
	blockAddGoalInput();
	
	GoalManager.isThisGoalInUserGoalList(goalDTO, {
		callback: function(result){
			if(result==false){	
				unblockAddGoalInput();					
				return true;
			}else{
				unblockAddGoalInput();
				var $content = buildFailedNotice('Thêm mục tiêu không thành công!', 'Mục tiêu bạn vừa thêm vào trùng với một trong số những mục tiêu bạn đã thêm. <b>Hãy kiểm tra lại!</b>');
				jQuery("div#addGoalResult").unbind();
				jQuery("div#addGoalResult").html($content).css('margin-bottom', '15px').fadeIn(2000).delay(1000).slideUp("slow");
				return false;
			}
		},
		exceptionHandler: function(message, exception) {			
			unblockAddGoalInput();
			var $content = buildFailedNotice('Thêm mục tiêu không thành công!', 'Mục tiêu bạn vừa thêm vào trùng với một trong số những mục tiêu bạn đã thêm. <b>Hãy kiểm tra lại!</b>');
			jQuery("div#addGoalResult").unbind();
			jQuery("div#addGoalResult").html($content).css('margin-bottom', '15px').fadeIn(2000).delay(1000).slideUp("slow");
			return false;
	    }
	});
	
	return true;					
}

function validate(){
	var flag = addNewGoalValidate();		
	
	calculateTotalPercent();			
	var lastIndex = 1;
	
	var $userGoalValue = jQuery(".userGoalValue");
	var ugValue = $userGoalValue.val();
	if(jQuery.trim(ugValue) == ""){
		jQuery(".valueError").text("Bạn hãy cho biết kết quả bạn mong muốn").show();
		flag = false;
	}else{
		jQuery(".valueError").hide();
	}
	
	var $deadLine = jQuery(".deadLine");
	var deadLine = $deadLine.val();
	if(jQuery.trim(ugValue) == ""){
		jQuery(".deadLineError").text("Hãy đặt ra ngày hoàn thành để bạn phấn đấu nhé").show();
		flag = false;
	}else{
		var re = new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}");
		if(!deadLine.match(re)){
			jQuery(".deadLineError").text("Ngày không đúng").show();
			flag = false;
		}else{
			jQuery(".deadLineError").hide();
		}
	}
	
	jQuery(".listTaskGoal").each(function(){
		var $this = jQuery(this);
		
		if($this.css("display") == "none")
			return;
		
		var index = $this.attr("rel");
		lastIndex = index;
		
		if(flag){			
			var $taskName = $this.find("input.taskName");
			var taskName = $taskName.val();
			if(jQuery.trim(taskName) == ""){
				toggleError(index, true, "Hãy cho biết tên giai đoạn này");
				flag = false;
			}else{
				toggleError(index, false);
			}
		}
		
		if(flag){
			var $taskPercent = $this.find("input.taskPercent");
			var percent = $taskPercent.val();
			percent = parseInt(percent.substring(0, percent.length-1));				
			if(percent == 0){
				toggleError(index, true, "Số % của mỗi giai đoạn phải lớn hơn 0");
				flag = false;
			}else{
				toggleError(index, false);
			}
		}
		
		if(flag){				
			var $taskDeadline = $this.find("input.taskDeadline");
			var taskDeadline = $taskDeadline.val();
			if(jQuery.trim(taskDeadline) != ""){
				var re = new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}");
				if(!taskDeadline.match(re)){
					toggleError(index, true, "Ngày không đúng");
					flag = false;
				}else{
					toggleError(index, false);
				}
			}else{
				toggleError(index, true, "Bạn hãy cho biết ngày hoàn thành giai đoạn này");
				flag = false;
			}
		}
	});
				
	if(flag){
		if(totalPercent < 100){
			toggleError(lastIndex, true, "Tổng số phần % các công việc của bạn chưa đủ 100%");
			flag = false;
		}
	}
	
	if(flag == true){
		var newGoal = jQuery("input#newGoalTitle").val();
		jQuery("input[rel=userGoalTitle]").val(newGoal);
	}
	
	return flag;
}

function toggleError(index, on, msg){
	if(on){
		jQuery(".taskError[rel="+index+"] p").text(msg);
		jQuery(".taskError[rel="+index+"]").show();
	}
	else
		jQuery(".taskError[rel="+index+"]").hide();
}

function createGoal(_title){
	var goal = {title: _title};
	GoalManager.createNewGoal(goal, function(data){		
		if(data != null){
			window.location = ctx + "/dashboard.html";
		}else{
			alert("Có lỗi phát sinh khi tạo mới MỤC TIÊU, xin vui lòng thử lại!");
		}
	});
}